package scene;

import java.awt.Color;
import java.nio.FloatBuffer;


public class Couleur  {

	private float red;
	private float blue;
	private float green;
	private float alpha;

    public static Couleur BLANC = new Couleur(1.f, 1.f, 1.f,1.0f); // WHITE
    public static Couleur RED = new Couleur(1.f, 0.f, 0.f,1.0f); // RED
    public static Couleur BLUE = new Couleur(0.f, 0.f, 1.f,1.0f); // BLUE
    public static Couleur GREEN = new Couleur(0.f, 1.f, 0.f,1.0f); // GREEN
    public static Couleur BLENDED_WHITE = new Couleur(1f, 1f, 1f,0.4f); // BLENDED WHITE
    public static Couleur GREY = new Couleur(0.3f, 0.3f, 0.3f,1f); // GREY
    public static Couleur SELECTION_COLOR = new Couleur(1.f, 1.f, 0.f,1.f); // YELLOW
    public static Couleur BLACK = new Couleur(0.f,0f,0.f,1.0f); // BLACK
    public static Couleur YELLOW = new Couleur(1.f,1f,0.0392f,1.0f); // BLACK
    public static Couleur PINK = new Couleur(232,156,181,1.0f); // PINK


        public Couleur(Color a)
                {
                this.setBlue(a.getBlue()/255f);
                this.setRed(a.getRed()/255f);
                this.setGreen(a.getGreen()/255f);
                this.setAlpha(a.getAlpha()/255f);
            
        }


	public final float getAlpha() {
		return alpha;
	}

	private void setAlpha(float alpha) {
		this.alpha = alpha;
	}

	/**
	 * Constructeur Couleur indice decimal RGB [0-1]
	 * @param r : valeur entre 0 et 1 de la couleur rouge
	 * @param g : valeur entre 0 et 1 de la couleur verte
	 * @param b : valeur entre 0 et 1 de la couleur bleu
	 * @param a	: parametre alpha entre 0 et 1
	 */
	public Couleur(float r, float g, float b, float a) {

		// TODO Auto-generated constructor stub
		setRed(r);
		setGreen(g);
		setBlue(b);
		setAlpha(a);



	}

	/**
	 * Constructeur Couleur indice entier RGB [0-255]
	 * @param r : valeur entre 0 et 255 de la couleur rouge
	 * @param g : valeur entre 0 et 255	de la couleur verte
	 * @param b : valeur entre 0 et 255	de la couleur bleu
	 * @param a	: parametre alpha entre 0 et 1
	 */
	public Couleur(int r, int g, int b, float a) {

		// TODO Auto-generated constructor stub
		setRed(r/255f);
		setGreen(g/255f);
		setBlue(b/255f);
		setAlpha(a);



	}

	/**
	 * Constructeur Couleur indice entier RGB [0-255]
	 * @param r : valeur entre 0 et 255 de la couleur rouge
	 * @param g : valeur entre 0 et 255	de la couleur verte
	 * @param b : valeur entre 0 et 255	de la couleur bleu
	 * Valeur de alpha = 1 par defaut pour ce constructeur
	 */
	public Couleur(int r, int g, int b) {

		// TODO Auto-generated constructor stub
		this(r,g,b,1);



	}


	/**
	 * Constructeur Couleur indice entier HSB [0-1]
	 * @param hue : valeur entre 0 et 1 de la teinte
	 * @param saturation : valeur entre 0 et 1 de la saturation
	 * @param brightness : valeur entre 0 et 1 de la brillance
	 */
	public Couleur(float hue, float saturation, float brightness)
	{

		Color c = Color.getHSBColor(hue, saturation, brightness);

		setAlpha(c.getAlpha()/255f);
		setRed(c.getRed()/255f);
		setBlue(c.getBlue()/255f);
		setGreen(c.getGreen()/255f);


	}

	public float[] getGFloat4Value()
	{
		float[] couleur = new float[4];
		couleur[0] = this.getRed();
		couleur[1] = this.getGreen();
		couleur[2] = this.getBlue();
		couleur[3] = this.getAlpha();

		return couleur;



	}

	public FloatBuffer getColor4fv()
	{
		return FloatBuffer.wrap(getGFloat4Value());



	}





	public final float getBlue() {
		return blue;
	}

	private void setBlue(float blue) {
		this.blue = blue;
	}

	public final float getGreen() {
		return green;
	}

	private void setGreen(float green) {
		this.green = green;
	}

	public final float getRed() {
		return red;
	}

	private void setRed(float red) {
		this.red = red;
	}

	public Color getColor()
	{
		return new Color(this.getRed(),this.getGreen(),this.getBlue(),this.getAlpha());
	}




}
